/**
 * 
 */
package cii_lib_graph;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import resources.Rule;
import resources.TFCCRender;
import cii_lib.CCII_ACCESS_INTERF;
import cii_lib.CII_Tree_Vectors;
import cii_lib.CIIdata;
import cii_lib.CIIlib;

/**
 * @author pdrabik
 *
 */
public class GInterfaceTablePanel extends javax.swing.JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel jIntPanel;
	private JTable jTableInt;
	private JScrollPane jScrollPane6;
	private Rule columnView;
	private Rule rowView;
	private JButton writeButton;
	private JButton readButton;
	private JTextField jTextFieldCharInt;
	private CCII_ACCESS_INTERF privInt;
	
	private static final Logger log = LoggerFactory
			.getLogger(GInterfaceTablePanel.class);
	
	public JPanel getPanel() {
		jIntPanel = new JPanel();
		JPanel jPanel6 = new JPanel();
//		jCompPanel.add(jPanel6);
		jPanel6.setBorder(BorderFactory.createTitledBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED), " Interfaces ", TitledBorder.LEADING, TitledBorder.TOP));
		jPanel6.setLayout(null);
		jPanel6.setSize(294, 357);
//		jPanel6.setBounds(308, 14, 294, 357);
		
		{
//			JLabel jLabel11 = new JLabel();
//			jPanel6.add(jLabel11);
//			jLabel11.setText("displayed as:");
//			jLabel11.setFont(new java.awt.Font("Tahoma",0,11));
//			jLabel11.setBounds(161, 21, 70, 21);
		}
		{
			JLabel jLabel12 = new JLabel();
			jPanel6.add(jLabel12);
			jLabel12.setText("Character: ");
			jLabel12.setFont(new java.awt.Font("Tahoma",0,11));
			jLabel12.setBounds(7, 21, 63, 21);
		}
		{
			jTextFieldCharInt = new JTextField();
			jPanel6.add(jTextFieldCharInt);
			jTextFieldCharInt.setBounds(63, 21, 91, 21);
			jTextFieldCharInt.setEditable(false);
			jTextFieldCharInt.setFont(new java.awt.Font("Tahoma",1,11));
		}
		{
			JLabel jLabel13 = new JLabel();
			jPanel6.add(jLabel13);
			jLabel13.setText("Data set:");
			jLabel13.setBounds(7, 49, 63, 21);
		}
		{
			JSeparator jSeparator2 = new JSeparator();
			jPanel6.add(jSeparator2);
			jSeparator2.setBounds(7, 49, 294, 7);
		}
		{
			jScrollPane6 = new JScrollPane();
			jPanel6.add(jScrollPane6);
			jScrollPane6.setBounds(7, 70, 280, 250);
			{
				columnView = new Rule(Rule.HORIZONTAL, false);
				rowView = new Rule(Rule.VERTICAL, false);
			    
				jTableInt = new JTable();
				jTableInt.setDefaultRenderer(Component.class,
						new TFCCRender(jTableInt.getDefaultRenderer(Component.class)));
				jTableInt.getTableHeader().setVisible(true);
				jTableInt.getTableHeader().setBounds(0, 291, 0, 0);
				jTableInt.getTableHeader().setReorderingAllowed(false);
				jTableInt.getTableHeader().setResizingAllowed(true);
				final JTable tmp = jTableInt;
				jTableInt.getTableHeader().addMouseListener(new MouseAdapter(){
					public void mouseClicked(MouseEvent evt) {
						log.debug(Integer.toString(evt.getX()/(tmp.getWidth()/tmp.getColumnCount())));
					}
					
				});
				jTableInt.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
				jTableInt.setColumnSelectionAllowed(true);
				jTableInt.setAutoResizeMode(0);
				jTableInt.setRowSelectionAllowed(true);
				jScrollPane6.setViewportView(jTableInt);
				jScrollPane6.setColumnHeaderView(columnView);
					
					jTableInt.setColumnSelectionAllowed(true);
					jTableInt.setRowSelectionAllowed(true);
//					{
//						JPopupMenu jPopupMenu1 = new JPopupMenu();
//						setComponentPopupMenu(
//							jTableInt,
//							jPopupMenu1);
//						jPopupMenu1.setBorder(new SoftBevelBorder(BevelBorder.RAISED, null, null, null, null));
//						{
//							jMenuItem2 = new JMenuItem();
//							jPopupMenu1.add(jMenuItem2);
//							if (!canRead) jMenuItem2.setEnabled(false);
//							else jMenuItem2.setEnabled(true);
//							jMenuItem2.setText("Read Selection");
//							jMenuItem2
//								.addActionListener(new ActionListener() {
//									public void actionPerformed(
//										ActionEvent evt) {
//										Read_many(int_selection);
//									}
//								});
//						}
//						{
//							jMenuItem3 = new JMenuItem();
//							jPopupMenu1.add(jMenuItem3);
//							if (!canRead) jMenuItem3.setEnabled(false);
//							else jMenuItem3.setEnabled(true);
//							jMenuItem3.setText("Read Everything");
//						}
//						{
//							jSeparator3 = new JSeparator();
//							jPopupMenu1.add(jSeparator3);
//						}
//						{
//							jMenuItem5 = new JMenuItem();
//							jPopupMenu1.add(jMenuItem5);
//							jMenuItem5.setText("Write Selection");
//							if (!canWrite) jMenuItem5.setEnabled(false);
//							else jMenuItem5.setEnabled(true);
//							jMenuItem5
//								.addActionListener(new ActionListener() {
//								public void actionPerformed(
//									ActionEvent evt) {
//									Write_many(int_selection);
//								}
//								});
//
//						}
//						{
//							jMenuItem6 = new JMenuItem();
//							jPopupMenu1.add(jMenuItem6);
//							jMenuItem6.setText("Write Everything");
//							if (!canWrite) jMenuItem6.setEnabled(false);
//							else jMenuItem6.setEnabled(true);
//						}
//						{
//							jSeparator4 = new JSeparator();
//							jPopupMenu1.add(jSeparator4);
//						}
//						{
//							jMenuItem10 = new JMenuItem();
//							jPopupMenu1.add(jMenuItem10);
//							jMenuItem10.setText("Select all");
//							jMenuItem10
//								.addActionListener(new ActionListener() {
//								public void actionPerformed(
//									ActionEvent evt) {
//									jTableInt.selectAll();
//								}
//								});
//						}
//						{
//							jMenuItem7 = new JMenuItem();
//							jPopupMenu1.add(jMenuItem7);
//							jMenuItem7.setText("Clear Selection");
//							jMenuItem7
//								.addActionListener(new ActionListener() {
//								public void actionPerformed(
//									ActionEvent evt) {
//									jTableInt.clearSelection();
//								}
//								});
//						}
//						{
//							jMenuItem1 = new JMenuItem();
//							jPopupMenu1.add(jMenuItem1);
//							jMenuItem1.setText("Mark");
//							jMenuItem1.setEnabled(false);
//						}
//						{
//							jMenuItem4 = new JMenuItem();
//							jPopupMenu1.add(jMenuItem4);
//							jMenuItem4.setText("Unmark");
//							jMenuItem4.setEnabled(false);
//						}
//					}
//					jTableInt.addMouseListener(new MouseAdapter() {
//						public void mouseReleased(MouseEvent evt) {
//							//TODO add your code for jTableInt.mouseClicked
//							int il = jTableInt.getSelectedColumnCount()
//								* jTableInt.getSelectedRowCount();
//							if (il>1) int_selection = new Insets(jTableInt.getSelectedRows()[0],
//									jTableInt.getSelectedColumns()[0],
//									jTableInt.getSelectedRows()[jTableInt.getSelectedRowCount()-1],
//									jTableInt.getSelectedColumns()[jTableInt.getSelectedColumnCount()-1]);
//							
//							
//						}
//						public void mouseClicked(MouseEvent evt) {
//							jTextField1.setText(""
//								+ evt.getX()
//								/ (jTableInt.getWidth() / jTableInt
//									.getColumnCount())
//								+ " ; "
//								+ evt.getPoint().y
//								/ jTableInt.getRowHeight());
//							
//							int_lastCellSell[0] = evt.getX()
//								/ (jTableInt.getWidth() / jTableInt
//									.getColumnCount());
//							int_lastCellSell[1] = evt.getPoint().y
//								/ jTableInt.getRowHeight();
//							
//							int addr = stad.countAddr(lastUsed,int_lastCellSell[0],int_lastCellSell[1]);
//							//log.debug(addr/8);
//							//TODO F
//							jTableInt.changeSelection(evt.getPoint().y
//								/ jTableInt.getRowHeight(), evt.getX()
//								/ (jTableInt.getWidth() / jTableInt
//									.getColumnCount()), false, false);
//						}
//					});
			}
			{
				readButton = new JButton();
				jPanel6.add(readButton);
				readButton.setText("Read");
				readButton.setBounds(80, 325, 63, 21);
				readButton.setFont(new java.awt.Font("Tahoma",0,10));
				readButton.setBackground(new java.awt.Color(191,234,192));
				readButton.setEnabled(false);
				readButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) { log.info("Command: {}", evt.getActionCommand());
						if (jTableInt.getSelectedRow()>=0 && jTableInt.getSelectedColumn()>=0) {
							CIIdata data= new CIIdata(privInt.Width());
							privInt.Read(jTableInt.getSelectedRow(), jTableInt.getSelectedColumn(), data);// privInt.GetItem().Address
							jTableInt.setValueAt(data.GetDec(), jTableInt.getSelectedRow(), jTableInt.getSelectedColumn());
						 }
					}
				});
			}
			{
				writeButton = new JButton();
				jPanel6.add(writeButton);
				writeButton.setText("Write");
				writeButton.setBounds(160, 325, 63, 21);
				writeButton.setFont(new java.awt.Font("Tahoma",0,10));
				writeButton.setBackground(new java.awt.Color(255,201,147));
				writeButton.setEnabled(false);
				writeButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) { log.info("Command: {}", evt.getActionCommand());
					if (jTableInt.getSelectedRow()>=0 && jTableInt.getSelectedColumn()>=0) {
					//int to = new Integer(jTextFieldOperTest.getText());
					 Long o= new Long(0);
					 try {
						o = new Long(((String)jTableInt.getValueAt(jTableInt.getSelectedRow(),jTableInt.getSelectedColumn())).trim());	
					 } catch (NumberFormatException e) {
						log.debug("Value discarded - must be long");
					 }
					 CIIdata data= new CIIdata(privInt.Width(),o);
					 privInt.Write(jTableInt.getSelectedRow(), jTableInt.getSelectedColumn(), data);
					}
				}
			});
			}
		}
//		{
//			jButtonWW = new JButton();
//			jPanel6.add(jButtonWW);
//			jButtonWW.setText("Modify");
//			jButtonWW.setBounds(224, 231, 77, 21);
//			jButtonWW.setFont(new java.awt.Font("Tahoma",0,11));
//			jButtonWW.addActionListener(new ActionListener() {
//				public void actionPerformed(ActionEvent evt) { log.info("Command: {}", evt.getActionCommand());
//					//int to = new Integer(jTextFieldOperTest.getText());
//					
//					useModify();
//					
//				}
//			});
//		} 
//		{
//			jLabel14 = new JLabel();
//			jPanel6.add(jLabel14);
//			jLabel14.setText("Current:");
//			jLabel14.setFont(new java.awt.Font("Tahoma",0,11));
//			jLabel14.setBounds(7, 231, 49, 21);
//		}
//		{
//			jTextField1 = new JTextField();
//			jPanel6.add(jTextField1);
//			jTextField1.setText("0 ; 0");
//			jTextField1.setEditable(false);
//			jTextField1.setBounds(56, 231, 35, 21);
//		}
//		{
//			jButton1 = new JButton();
//			jPanel6.add(jButton1);
//			jButton1.setText("Go to: ");
//			jButton1.setVerticalAlignment(SwingConstants.TOP);
//			jButton1.setVerticalTextPosition(SwingConstants.TOP);
//			jButton1.setMargin(new Insets(1,2,2,2));
//			jButton1.setFont(new java.awt.Font("Tahoma",0,11));
//			jButton1.setBounds(98, 231, 56, 21);
//			jButton1.addActionListener(new ActionListener() {
//				public void actionPerformed(ActionEvent evt) { log.info("Command: {}", evt.getActionCommand());
//					int x = new Integer(jTextField2.getText());
//					int y = new Integer(jTextField3.getText());
//					int_lastCellSell[0] = x;
//					int_lastCellSell[1] = y;
//					jTableInt.changeSelection(y, x, false, false);
//					jTextField1.setText("" + x + " ; " + y);
//				}
//			});
//		}
//		{
//			jTextField2 = new JTextField();
//			jPanel6.add(jTextField2);
//			jTextField2.setText("0");
//			jTextField2.setBounds(154, 231, 21, 21);
//		}
//		{
//			jLabel15 = new JLabel();
//			jPanel6.add(jLabel15);
//			jLabel15.setText(";");
//			jLabel15.setFont(new java.awt.Font("Tahoma",0,11));
//			jLabel15.setBounds(175, 231, 7, 21);
//		}
//		{
//			jTextField3 = new JTextField();
//			jPanel6.add(jTextField3);
//			jTextField3.setText("0");
//			jTextField3.setBounds(182, 231, 21, 21);
//		}
		
		jIntPanel= jPanel6;
	return jPanel6;
	}
	
public void DisplayInterface(CCII_ACCESS_INTERF parInt) {
	privInt = parInt;
	CII_Tree_Vectors valof = new CII_Tree_Vectors(parInt.GetItem());
		JTable where = jTableInt;
		changePanelName(parInt.Name());
		int x = new Integer(valof.get(4));
		int y = new Integer(valof.get(5));
		if (x>=10) CallToResizeRule(x);
		else rowView.SIZE=16;
		if (valof.getCCII_CONFIG_TABLE().Access==CIIlib.TABLE_ACCESS.NA) {
			readButton.setEnabled(false);
			writeButton.setEnabled(false);			
		}else if (valof.getCCII_CONFIG_TABLE().Access==CIIlib.TABLE_ACCESS.RC) {
			readButton.setEnabled(true);
			writeButton.setEnabled(false);			
		}else if (valof.getCCII_CONFIG_TABLE().Access==CIIlib.TABLE_ACCESS.RW) {
			readButton.setEnabled(true);
			writeButton.setEnabled(true);			
		}else if (valof.getCCII_CONFIG_TABLE().Access==CIIlib.TABLE_ACCESS.IR) {
			readButton.setEnabled(true);
			writeButton.setEnabled(true);			
		}else if (valof.getCCII_CONFIG_TABLE().Access==CIIlib.TABLE_ACCESS.WO) {
			readButton.setEnabled(false);
			writeButton.setEnabled(true);			
		}else if (valof.getCCII_CONFIG_TABLE().Access==CIIlib.TABLE_ACCESS.RO) {
			readButton.setEnabled(true);
			writeButton.setEnabled(false);			
		}
			jTextFieldCharInt.setText(valof.getCCII_CONFIG_TABLE().Type.name());
		
		DefaultTableModel tmod = new DefaultTableModel();
		
		if (where instanceof JTable) {
			JTable tym = new JTable();
			
			Object[][] data = new Object[x][y];
			
			int iter = x*y;
//			File plik = new File(new File("").getAbsolutePath()+"\\"+lastUsed.getLink()+"\\"+lastUsed.Clear(1)+"\\data.xls");
//			if (plik.exists()) { 
//				for (int o=0;o<y;o++) {
//					for(int ox=0;ox<x;ox++) {
//						data[ox][o] = toxls.getData(ox, o, plik);
//					}
//				}
//			} else {
				for (int o=0;o<y;o++) {
					for(int ox=0;ox<x;ox++) {
						data[ox][o] = " ";
					}
				}
//			}
		
			Object[] column = new Object[y];
			for (int k=0;k<y;k++) column[k]=k;
			tmod = new DefaultTableModel(data,column);
			tym = (JTable)where;
			tym.setModel(tmod);
			columnView.setPreferredWidth(where.getWidth());
			rowView.Adjust(tym);
		    jScrollPane6.setRowHeaderView(rowView);
		}
		
	}

	public void CallToResizeRule(int x) {
	int ilC= 1,tmp;
//	Math.pow(a, b)
	while (true){
		tmp=x/((int)Math.pow(10, ilC));
		if (tmp==0) break;
		ilC++;
	}
	rowView.SIZE = 12*ilC;
	}
	
	public void changePanelName(String name) {
		jIntPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED),
				" Interfaces : "+name, TitledBorder.LEADING, TitledBorder.TOP));
	}

	public JPanel getJIntPanel() {
		return jIntPanel;
	}

	public void setJIntPanel(JPanel intPanel) {
		jIntPanel = intPanel;
	}

	public JScrollPane getJScrollPane() {
		return jScrollPane6;
	}

	public void setJScrollPane(JScrollPane scrollPane6) {
		jScrollPane6 = scrollPane6;
	}
	/**
	 * 
	 * @return Interface data table
	 */
	public JTable getJTableInt() {
		return jTableInt;
	}
	/**
	 * Interface data table
	 * @param tableInt
	 */
	public void setJTableInt(JTable tableInt) {
		jTableInt = tableInt;
	}

	public JTextField getJTextFieldCharInt() {
		return jTextFieldCharInt;
	}

	public void setJTextFieldCharInt(JTextField textFieldCharInt) {
		jTextFieldCharInt = textFieldCharInt;
	}

	public JButton getReadButton() {
		return readButton;
	}

	public void setReadButton(JButton readButton) {
		this.readButton = readButton;
	}

	public JButton getWriteButton() {
		return writeButton;
	}

	public void setWriteButton(JButton writeButton) {
		this.writeButton = writeButton;
	}
}
